home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / ADA / GNAT / !gcc / gnat / Help < prev    next >
Text File  |  1996-11-23  |  24KB  |  597 lines

  1.                           GNAT
  2.                         ~~~~~~~~
  3.  
  4. This is a port of the GNAT (GNU/NYU Ada Translator) compiler (version
  5. 3.0.3) for the Ada programming language to the Acorn range of ARM based
  6. machines, running under RISC OS. As such, this package is covered by the
  7. FSF General Public License (see the files gnat.Copying and
  8. gnat.CopyingLib, and later for details).
  9.  
  10. This port is © 1995, 1996 Peter Burwood
  11.  
  12. As with as GNU programs, THERE IS NO WARRANTY OF ANY SORT
  13.  
  14. IMPORTANT: GNAT REQUIRES A LOT OF MEMORY. The wimpslot needs to be at
  15. least 6000K in size. GNAT is NOT capable of grabbing extra memory, so
  16. the initial WimpSlot sets the maximum memory available. GNAT can use
  17. dynamic areas on the Risc PC for the heap and stack and in this mode the
  18. wimpslot needs to be at least 3000K in size (though running from AMU can
  19. increase this). See Dynamic Areas below for further details.
  20.  
  21. Thanks go to various people for the help and assistance that they have
  22. given me. These are :
  23.  
  24. The GNAT development team for writing GNAT.
  25.  
  26. Nick Burrett, Simon Callan, Richard Earnshaw, Michael Ben-Gershon and
  27. Pietr Schonmaker, for most of the hard work involved in the ARM backend.
  28.  
  29. Niklas RÖjemo, for the assembler `as'
  30.  
  31. Huw Rogers and Simon Callan, for Unixlib.
  32.  
  33.  
  34. Files
  35. =====
  36.  
  37. There are over 900 files in the GNAT binary distribution, so I won't
  38. list them all, but the overall contents of this archive is as follows :-
  39.  
  40.    !gcc.adainc...        - Ada 95 standard library and GNAT extensions.
  41.    !gcc.bin...           - GNAT binaries (see gnatinfo) and gcc binary.
  42.    !gcc.gcc.adalib...    - object files for Ada library.
  43.    !gcc.gcc.o.libgnat    - support library for GNAT using UnixLib.
  44.    !gcc.gcc.o.libgnat_cc - support library for GNAT using SharedCLibrary.
  45.    !gcc.gcc.o.libm       - empty maths library to stop complaints since
  46.                            the functions are in UnixLib and stubs anyway.
  47.    !gcc.gnat             - documentation for GNAT.
  48.    !gcc.gnat.examples    - examples from standard GNAT distribution
  49.                            included is a utility that works like Unix's
  50.                            rm command which is used by the makefile.
  51.  
  52.  
  53. Installation
  54. ============
  55.  
  56. Before attempting to use GNAT, it should be noted that this distribution
  57. of GNAT is not standalone, consisting of only the GNAT compiler, tools
  58. and library.
  59.  
  60. GNAT 3.03 requires GCC 2.7.2, as supplied by Nick Burrett and available
  61. from Acorn ftp sites such as Hensa, to be installed. Unpack this
  62. complete archive into the GCC 2.7.2 directory. Double click on !GCC to
  63. ensure the environment is correctly set for the compiler.
  64.  
  65. There is an alternative binary for !gcc.bin.gcc called !gcc.bin.gcc-gnat
  66. which may need to be copied over the original !gcc.bin.gcc file from the
  67. GCC 2.7.2 distribution (after taking a backup of the original file).
  68. This is only necessary if the version from GCC 2.7.2 fails to work
  69. properly, by which I mean that running the makefile in the examples
  70. directory fails. The version in this archive understands Ada, C, C++,
  71. Fortran and Pascal filenames, so should work with those GNU compilers.
  72.  
  73. GNAT 3.03 also requires UnixLib 3.7b or later, but not UnixLib 4.0. GNAT
  74. will not work with UnixLib 3.6e, but it might work with UnixLib 3.7a.
  75. The following commands should be part of the !Run file that comes with
  76. GCC 2.7.2, but if not, then please add them before trying to use GNAT.
  77.  
  78.   | Set search paths for the Ada run time library files
  79.   *Set GNATada$Path <Obey$Dir>.adainc.
  80.   *Set GNATInc$Path gnatada:1.,gnatada:2.,gnatada:3.,gnatada:4.,gnatada:5.,gnatada:6.,gnatada:7.
  81.   *Set GNATlib$Path gcc:adalib.1.,gcc:adalib.2.,gcc:adalib.3.,gcc:adalib.4.,gcc:adalib.5.,gcc:adalib.6.,gcc:adalib.7.
  82.  
  83.   | Set search path for gnatbl
  84.   *SetMacro path <Run$Path>
  85.  
  86.   | Enable dynamic area usage for GnatMake
  87.   *Set GnatMake_Heap ""
  88.  
  89.  
  90. GNAT uses the following filename extensions :-
  91.  
  92.    .ads   - Ada specifications (similar to C .h files).
  93.    .adb   - Ada bodies (similar to C .c files).
  94.    .adc   - The file gnat.adc can be used to override the normal file
  95.             naming convention (see !gcc.gnat.gnatinfo).
  96.    .ali   - GNAT's source code library support files (these are
  97.             generated by the compiler).
  98.    .xrs   - cross reference file for corresponding .ads file
  99.    .xrb   - cross reference file for corresponding .adb file
  100.  
  101. and these extensions must be included in the UnixFS$sfix environment
  102. variable. GCC 2.7.2's !Run file should already include these, but if not
  103. then change the '*Set UnixFS$sfix ...' to something like this :-
  104.  
  105.   *Set UnixFS$sfix "a:c:f:h:i:l:o:p:s:y:ads:adb:ali:adc:xrb:xrs"
  106.  
  107. Be careful when adjusting this variable if you are also using other GNU
  108. compilers. The additional file extensions required for GNAT are
  109.  
  110.    ":ads:adb:ali:adc:xrb:xrs"
  111.  
  112.  
  113. Using GNAT
  114. ==========
  115.  
  116. See the gnatinfo file in the gnat directory and the GCC-FAQ which is in
  117. the GCC 2.7.2 archive. Also look at the makefile in the gnat.examples
  118. directory which can be executed with amu. Ensure that you have a large
  119. enough WimpSlot, otherwise AMU will exit with a fatal error.
  120.  
  121. All of the command line switches mentioned in the GCC documentation also
  122. work with GNAT, so for example, throwback is enabled with -mthrowback.
  123.  
  124.  
  125. Using the SharedCLibrary
  126. ========================
  127.  
  128. It is actually possible to use GNAT without UnixLib by using the
  129. SharedCLibrary and linking against Acorn's stubs. Do not try to use
  130. UnixLib and Acorn's stubs together in the same program - it will not
  131. work.
  132.  
  133. To use Acorn's stubs you will need Acorn's C compiler or a copy of
  134. gstubs from ftp sites such as Hensa. You must link with the libgnat_cc
  135. library instead of the libgnat library (these files are in !GCC.gcc.o).
  136. This can be accomplished by either replacing libgnat with libgnat_cc
  137. (after you have made a safe copy of libgnat) or by using
  138. "-mstubs -lgnat_cc" with gnatbl. The makefile in the examples directory
  139. has a line commented out which illustrates this method of using the
  140. SharedCLibrary. Simply uncomment this line and build the example
  141. programs with the makefile.
  142.  
  143.  
  144. Using other C libraries such as UnixLib, DeskLib, OSLib and the Toolbox
  145. =======================================================================
  146.  
  147. Until Ada bindings become available for these libraries, there are
  148. basically two approaches. Write simple veneers for the function or SWI,
  149. or write the easy bits in C and provide a narrow interface to call from
  150. Ada. Try and avoid C functions which take a variable number of arguments
  151. and extensible arrays. Functions taking a variable number of arguments
  152. can be called by overloading the interface functions with differing
  153. number of arguments. There is an alternative, but it is very messy and I
  154. won't go into it here. A messy solution also exists for extensible
  155. arrays, but again I'll avoid the issue for now. Anonymous unions also
  156. cause problems and are not representable with GNAT 3.03 (a later version
  157. of GNAT provides a pragma to overcome this) and so must be avoided.
  158.  
  159. An example of a general SWI veneer and a call to OS_Bell is provided in
  160. the !gcc.gnat.examples.swi directory. The kernel package is just a thin
  161. binding to an assembler generic swi routine as exists in UnixLib and the
  162. SharedCLibrary. In a larger system, this package would be better as a
  163. child package of a package called RiscOS.
  164.  
  165.  
  166. File Name Rules
  167. ===============
  168.  
  169. The gnatinfo file explains how GNAT expects to find files. This naming
  170. convention is necessary for GNAT to find `with'ed units. Under RISC OS,
  171. the file name is crunched to 10 characters rather than 8 characters as
  172. with DOS. gnatk8 can be used to find out what the krunched name of a
  173. file should be by using `10' as the second argument to gnatk8.
  174.  
  175. File name rules can be overridden with the pragma Source_File_Name as
  176. described in gnatinfo.
  177.  
  178. If you need to use GnatChop to convert some Ada files to the GNAT naming
  179. convention, then you may be unlucky and hit a shortcoming of GnatChop.
  180. When the krunched name for two or more units is not unique, then
  181. GnatChop will fail to chop the original file but will report the
  182. duplicate krunched name that it is trying to reuse. This problem can be
  183. circumvented by hand chopping the units which krunch to the same file
  184. name and save them as unique file names and use pragma Source_File_Name
  185. so that the compiler can find them.
  186.  
  187.  
  188. Dynamic Areas
  189. =============
  190.  
  191. I have modified UnixLib to use dynamic areas on the Risc PC and these
  192. modifications have been included in UnixLib 3.7a. This section applies
  193. to all GNU compilers supplied by either Nick Burrett, myself or
  194. (hopefully) anyone else providing they have used UnixLib 3.7a. A
  195. description of using dynamic areas is included with UnixLib 3.7a.
  196. Basically, use
  197.  
  198.   *Set GCC_Heap ""
  199.  
  200. to enable dynamic areas for the compiler and
  201.  
  202.   *UnSet GCC_Heap
  203.  
  204. to disable dynamic areas for the compiler.
  205.  
  206. Before running a program set the wimpslot in the normal way, but it only
  207. needs to be large enough to hold the sum of the largest executables that
  208. can be run concurrently. e.g., with gcc, use the unsqueezed size of gcc
  209. plus cc1. When running from a command line amu remember to allow
  210. additional space for the amu executable and amu's workspace (though this
  211. is tricky to estimate!).
  212.  
  213. If other programs that form part of GNAT are run directly from the
  214. command line, e.g., gnatmake, then separate environment variables must
  215. be set to allow these programs to use dynamic areas for the program's
  216. heap. So, with gnatmake,
  217.  
  218.    *Set gnatmake_heap ""
  219.  
  220. This applies to gnatmake, gnatbl, gnatchop and gnatf. You should not
  221. invoke any of the other executables directly, apart from gnatk8 and
  222. gnatk8 does not use enough memory to warrant using a dynamic area.
  223.  
  224. If you enable dynamic areas and you still run out of memory when
  225. compiling, then I suggest that you get something like Clares' Virtualise
  226. product which will provide virtual memory for dynamic areas. Note, I
  227. have no connection with this program, but I have used it when compiling
  228. Ada programs which needed more memory than I have. Alternatively,
  229. consider buying more memory.
  230.  
  231.  
  232. Speeding up compilation
  233. =======================
  234.  
  235. If you have plenty of ram, then moving the Ada library units onto a ram
  236. disc should speed up compilations which "with" a lot of standard library
  237. units. This will require a ram disc of nearly 3MB, so is best done only
  238. if you have more than 20MB of ram. If the standard libraries are placed
  239. on the ram disc, then the GNATada$Path should be redefined to point to
  240. the ram disc. The Ada library units are the !gcc.adainc directory.
  241.  
  242. Placing the main compiler, gnat1, on the ram disc will also help,
  243. providing you have enough free ram. If gnat1 is put on the ram disc,
  244. then ensure that the ram location appears earlier in the run path.
  245.  
  246.  
  247. Overcoming the limit of 77 files in a directory
  248. ===============================================
  249.  
  250. Ada projects with more than 77 files are awkward to manage under RISC OS
  251. due to the RISC OS directory restriction. One solution is to try using a
  252. dos image disc, but be aware that this means all your files are really
  253. in a single file and if this image file is corrupted in some way you
  254. risk losing all your files.
  255.  
  256. Alternatively (and probably better) is to split your source into
  257. sub-systems and build these each in their own directory. This is
  258. especially important when GnatMake is used since the output of GnatMake
  259. is always to the current directory even when it is compiling a file from
  260. another directory. When a sub-system needs to use another sub-system,
  261. then build the independent one first and add its directory to the search
  262. path.
  263.  
  264. Before I go any further, please read the section "Search paths and the
  265. Run Time Library" in gnatinfo. The last search rule (unix only) also
  266. applies to RISC OS.
  267.  
  268. The default location is GNATinc: for the RTL source and GNATlib: for the
  269. RTL objects. Note that the environment variables `ADA_INCLUDE_PATH' and
  270. `ADA_OBJECTS_PATH' are used unchanged, that is, do not try using
  271. something like AdaInclude$Path because it will not work. Obviously, the
  272. case of the environment variable is unimportant under RISC OS. Also, do
  273. not alter the GNATinc$Path and GNATlib$Path variables set in !gcc.!Run
  274. since GNAT is unlikely to work if you do. An alternative to using
  275. `ADA_INCLUDE_PATH' and `ADA_OBJECTS_PATH' is to use -I to specify the
  276. include directories - just as you would with C.
  277.  
  278. Now, consider the following example where we have a library directory
  279. providing a sub-system and your main project directory which pulls all
  280. the sub-systems together.
  281.  
  282. I created the following
  283.  
  284.            RAM::0.$
  285.               |
  286.         --------------
  287.         |            |
  288.        lib         home
  289.         |            |
  290.      info.ads      test_info.adb
  291.  
  292. Then issued the following commands
  293.  
  294. ---------------------
  295. *dir ram::0.$.home
  296. *wimpslot -min 4000k
  297. |enable dynamic areas for gnatmake and anything it invokes
  298. *Set gnatmake_heap ""
  299. *gnatmake -v -Iram::0.$.lib test_info.adb
  300.  
  301. GNAT Make Version 3.03 Copyright 1995 Free Software Foundation, Inc.
  302. Checking --> test_info.adb
  303.   "test_info.ali" missing.  **Recompile**
  304. gcc -c -Iram::0.$.lib test_info.adb
  305. Checking --> ram::0.$.lib/info.ads
  306.   "info.ali" missing.  **Recompile**
  307. gcc -c -Iram::0.$.lib ram::0.$.lib/info.ads
  308. gnatbind -Iram::0.$.lib test_info.ali
  309. gnatbl test_info.ali -linkonly
  310. ---------------------
  311.  
  312. Now this managed to create an executable, but it has put info.{ali.o} in
  313. the ram::0.$.home directory. This is not something we want since the
  314. home directory is soon going to hit the damn 77 file limit. Also, it's
  315. wrong from the point of view of not having info's compiled files in the
  316. same directory as the source for info.
  317.  
  318. So, after cleaning up the files so we just have the source files, I then
  319. issued the following commands
  320.  
  321. ---------------------
  322. *dir ram::0.$.lib
  323. *gnatmake -v -c info.ads
  324.  
  325. GNAT Make Version 3.03 Copyright 1995 Free Software Foundation, Inc.
  326. Checking --> info.ads
  327.   "info.ali" missing.  **Recompile**
  328. gcc -c info.ads
  329. *dir ^.home
  330. *gnatmake -Iram::0.$.lib -v test_info.adb
  331.  
  332. GNAT Make Version 3.03 Copyright 1995 Free Software Foundation, Inc.
  333. Checking --> test_info.adb
  334.   "test_info.ali" missing.  **Recompile**
  335. gcc -c -Iram::0.$.lib test_info.adb
  336. Checking --> ram::0.$.lib/info.ads
  337. gnatbind -Iram::0.$.lib test_info.ali
  338. gnatbl test_info.ali -linkonly
  339. ---------------------
  340.  
  341. Now, this is what we need, an executable and the files all in the
  342. correct places, i.e.,
  343.  
  344.            RAM::0.$
  345.               |
  346.         --------------
  347.         |            |
  348.        lib         home
  349.         |            |
  350.      info.ads      test_info.adb
  351.      info.ali      test_info.ali
  352.      info.o        test_info.o
  353.                    test_info
  354.  
  355. We can also try this with the Ada_Include_Path and Ada_Objects_Path. So
  356. with info.{ali,o} already in the lib directory and only test_info.adb in
  357. the home directory, I issued the following commands.
  358.  
  359. ---------------------
  360. *set Ada_Include_Path ram::0.$.lib
  361. *set Ada_Objects_Path ram::0.$.lib
  362. *gnatmake -v  test_info.adb
  363.  
  364. GNAT Make Version 3.03 Copyright 1995 Free Software Foundation, Inc.
  365. Checking --> test_info.adb
  366.   "test_info.ali" missing.  **Recompile**
  367. gcc -c test_info.adb
  368. Checking --> ram::0.$.lib/info.ads
  369. gnatbind test_info.ali
  370. gnatbl test_info.ali -linkonly
  371. ---------------------
  372.  
  373. Please notice that with Ada_Include_Path and Ada_Objects_Path you do not
  374. have a trailing "." on the directory names. This is because each comma
  375. separated part of these environment variables is checked for the
  376. location of the file (info.ads in this case) by gnat itself. The GNATInc
  377. and GNATLib bits work differently (they have a trailing ".") because
  378. gnat only uses gnatinc: and gnatlib: and gets RISC OS to do the search.
  379.  
  380. Right, now onto a more complicated case involving several subsystems.
  381. When there are several subsystems, I would recommend that
  382. Ada_Include_Path and Ada_Objects_Path are not used because it is easy to
  383. soon lose track of the dependancies between the subsystems and end up
  384. with objects in the wrong directory. It is much better to use multiple
  385. -I switches.
  386.  
  387. Build a directory tree structure something like this.
  388.  
  389.                   ...project
  390.                       |
  391.           -------------------------------------------
  392.           |         |          |          |         |
  393.        common    subsys1    subsys2    subsys3    main
  394.                                           |
  395.                                        -------
  396.                                        |     |
  397.                                        1     2
  398.  
  399.  common  - global files used by too many files.
  400.  subsys1 - a subsystem with less than 77 files.
  401.  subsys2 - another subsystem.
  402.  subsys3 - a larger subsystem that needs 2 directories to overcome 77
  403.            file limit.
  404.  main    - the project specific bits including the main unit.
  405.  
  406. There is one thing about the 77 file limit you may or may not come across.
  407. While you can have say 77 .ads and 77 .adb files in a single directory,
  408. you may not be able to compile all the files in the directory. This
  409. happens when there are some .ads that have no corresponding .adb. I
  410. typically put a maximum of 60 files into a single directory, since this
  411. allows for specs without bodies. If a lot of your .adb files are
  412. separates then you are less likely to hit this limitation since
  413. separates don't generate .ali and .o files.
  414.  
  415. The problematic subsystem is subsys3. This will probably be tricky to
  416. make with a single gnatmake because a single gnatmake would put some of
  417. the objects in the wrong subdirectory of subsys3 (e.g., in 1 instead of
  418. 2), so you may have to use several invocations of gnatmake. Effectively,
  419. treat each subdirectory of subsys3 as a separate subsystem. When issuing
  420. the gnatmake command, ensure that you are in the correct directory.
  421.  
  422. Another problem is common. This directory is unlikely to have a single
  423. unit which has a transitive closure encompassing all the other units in
  424. the directory. You would probably be best using "gcc -c" or "gnatmake
  425. -c" on all the files in this directory (gnatmake has the advantage of
  426. checking whether compilation is necessary).
  427.  
  428. Perhaps something along these lines.
  429.  
  430. *dir project
  431. *dir common
  432. *gnatmake -c file1.adb
  433. *gnatmake -c file7.adb
  434. *dir ^.subsys1
  435. *gnatmake -I../common -c subsys1.adb
  436. *dir ^.subsys2
  437. *gnatmake -I../common -c subsys2.adb
  438. *dir ^.subsys3.1
  439. *gnatmake -I../../common -c subsys311.adb
  440. *gnatmake -I../../common -c subsys315.adb
  441. *dir ^.2
  442. *gnatmake -I../../common -I../1 -c subsys32.adb
  443. *dir ^.^.main
  444. *gnatmake -I../common -I../subsys1 -I../subsys2 -I../subsys3/1 -I../subsys3/2 main.adb
  445.  
  446. Not wonderful I know, but there is really no alternative while the 77
  447. file limit exists.
  448.  
  449. Note, I have used Unix style directory names with the -I switches, but
  450. RISC OS directory specifications could be used. You may also find it
  451. easier if path variables are declared to locate the directories. So, in
  452. the above example, we would define something like this
  453.  
  454. *Set common$path adfs::4.$.project.common.
  455. *Set subsys1$path adfs::4.$.project.subsys1.
  456. *Set subsys2$path adfs::4.$.project.subsys2.
  457. *Set subsys3$path adfs::4.$.project.subsys3.
  458.  
  459. and the above commands would become
  460.  
  461. *dir project
  462. *dir common
  463. *gnatmake -c file1.adb
  464. *gnatmake -c file7.adb
  465. *dir ^.subsys1
  466. *gnatmake -Icommon:/ -c subsys1.adb
  467. *dir ^.subsys2
  468. *gnatmake -Icommon:/ -c subsys2.adb
  469. *dir ^.subsys3.1
  470. *gnatmake -Icommon:/ -c subsys311.adb
  471. *gnatmake -Icommon:/ -c subsys315.adb
  472. *dir ^.2
  473. *gnatmake -Icommon:/ -Isubsys3:1/ -c subsys32.adb
  474. *dir ^.^.main
  475. *gnatmake -Icommon:/ -Isubsys1:/ -Isubsys2:/ -Isubsys3:1/ -Isubsys3:2/ main.adb
  476.  
  477. This is all necessary because as the gnatinfo file says,
  478.  
  479.   "The compiler outputs its object files and ALI files in the current working
  480. directory (NOTE: the object file can be redirected with the -o option;
  481. however, gcc and gnat1 have not been coordinated on this so the ALI file
  482. will not go to the right place -- DON'T DO THIS)."
  483.  
  484. So, for now you have to do something yucky along the lines above. I
  485. should contact the gnat team to see whether they are going to address
  486. the limitation of the -o switch and .ali files so that gnatmake can
  487. incoporate it. Alternatively, I could modify gnatmake to change the
  488. current working directory before issuing the compilations. However, I
  489. suspect this change would upset a lot of other peoples makefiles (across
  490. all platforms) so the change may not be accepted back into the main gnat
  491. source.
  492.  
  493. The other thing to do is to use make files and use a make system such
  494. as Acorn's make utility, amu. I use this for rebuilding gnat and it does
  495. work, but you have to employ a couple of tricks with .suffixes as used
  496. in the makefile in the examples directory.
  497.  
  498.  
  499. Known problems
  500. ==============
  501.  
  502. Known, damn if I'd known about them, I'd have fixed them. Please tell me
  503. all that you find and see below for how to contact me and the file
  504. !gcc.gnat.Bugs for what to do if you have found a bug.
  505.  
  506. Actually AMU behaviour is fun, see the examples directory for a working
  507. makefile.
  508.  
  509. RISC OS specific documentation is also lacking (i.e., no Intro file). It
  510. will improve soon providing you send explanations of problems.
  511.  
  512. GCC 2.4.5 produces incompatible code with 2.7.2 and that is simply that.
  513.  
  514. GnatChop does not cope well with separates because it adds a command to
  515. the generated script for separates when it shouldn't. This is a bug in
  516. the main GNAT source and thus is not specific to RISC OS. The '-w'
  517. switch does not work very well either, so be careful about overwriting
  518. files. When using GnatChop, rename the source file to files/src (RISC OS
  519. name) and use "gnatchop -s files.src" to chop the files. Again, the 77
  520. file limit is a problem, so either use a dos image file or split
  521. files/src into smaller units before chopping, then split into
  522. subsystems.
  523.  
  524.  
  525. Known Restrictions
  526. ==================
  527.  
  528. No tasking for RISC OS version, yet!
  529.  
  530. No interfaces specifications for the Wimp, though I am working on
  531. providing libraries. For the time being, implement a tight interface to
  532. the wimp with some high level C functions and write your own interface
  533. file.
  534.  
  535.  
  536. Pointers to Ada related items on the Web
  537. ========================================
  538.  
  539. The main GNAT ftp site is ftp://ftp.cs.nyu.edu:/pub/gnat.
  540.  
  541. Here are some WWW URL's for Ada. You can get to many other sites that
  542. have Ada related information from the first two pointers.
  543.  
  544.   Ada meta sites
  545.     http://www.cera2.com/ada.htm
  546.   Ada IC
  547.     http://sw-eng.falls-chruch.va.us/AdaIC/
  548.   Home of the Brave Ada programmers
  549.     http://www.adahome.com/
  550.   Ada Lovelace tutorials
  551.     http://www.adahome.com/Tutorials/Lovelace/lovelace.html
  552.   AdaBasis - reusable component repository
  553.     http://www.informatik.uni-stuttgart.de/ifi/ps/ada-software/ada-software.html
  554.   Ada SIG
  555.     http://www.acm.org/sigada/
  556.   Ada UK
  557.     http://www.adauk.org.uk/
  558.   GNAT Home
  559.     http://www.gnat.com/
  560.   Reusable Component Library
  561.     http://lglwww.epfl.ch/Components
  562.  
  563. See the end of the file !gcc.gnat.gnatinfo for some other pointers.
  564.  
  565.  
  566. History
  567. =======
  568.  
  569.    May-1996
  570.      First RISC OS release of GNAT 3.01
  571.  
  572.    Oct-1996
  573.      gnatbind now copes with rooted directories at link phase.
  574.      gcc backend bug fixed which had caused a bug in Text_IO stopping
  575.      it from opening files (raising NAME_ERROR) and in the numerics
  576.      elemenatary functions for long and long long floats.
  577.  
  578.    Nov-1996
  579.      Second RISC OS release of GNAT 3.01
  580.  
  581.    Nov-1996
  582.      First RISC OS release of GNAT 3.03
  583.  
  584. Contacting me
  585. =============
  586.  
  587. If you wish to contact me, then I can be contacted as follows:
  588.  
  589. Peter Burwood
  590. 205 Masons Avenue
  591. Harrow
  592. Middlesex
  593. HA3 5AZ
  594.  
  595. Email: gnat@arcangel.dircon.co.uk for gnat related queries
  596.        pjb@arcangel.dircon.co.uk for anything else
  597.